home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 748 / delitracker / include / misc / deliplayer.i
Text File  |  1995-03-18  |  8KB  |  246 lines

  1. **
  2. **  $Filename: misc/DeliPlayer.i $
  3. **  $Release: 2.0 $
  4. **  $Revision: 1.30$
  5. **  $Date: 12/09/92$
  6. **
  7. **    Definitions and Macros for creating DeliTracker Playermodules
  8. **
  9. **    (C) Copyright 1991, 1992 Delirium Softdesign
  10. **        All Rights Reserved
  11. **
  12.  
  13.     IFND    DELITRACKER_PLAYER_I
  14. DELITRACKER_PLAYER_I    SET    1
  15.  
  16.     IFND EXEC_TYPES_I
  17.         INCLUDE "exec/types.i"
  18.     ENDC
  19.  
  20.     IFND UTILITY_TAGITEM_I
  21.         INCLUDE "utility/tagitem.i"
  22.     ENDC
  23.  
  24. ;----------------------------------------------------------------------------
  25. ;
  26. ; for those who don't have V37 yet!
  27. ;
  28. ;TAG_DONE    EQU    0
  29. ;TAG_IGNORE    EQU    1
  30. ;TAG_MORE    EQU    2
  31. ;TAG_SKIP    EQU    3
  32. ;
  33. ;TAG_USER    EQU    $80000000
  34. ;
  35. ;
  36. ;ENUM        MACRO
  37. ;        IFC    '\1',''
  38. ;EOFFSET        SET 0
  39. ;        ENDC
  40. ;        IFNC    '\1',''
  41. ;EOFFSET        SET \1
  42. ;        ENDC
  43. ;        ENDM
  44. ;
  45. ;EITEM        MACRO
  46. ;\1        EQU    EOFFSET
  47. ;EOFFSET        SET EOFFSET+1
  48. ;        ENDM
  49. ;
  50. ;----------------------------------------------------------------------------
  51.  
  52.  
  53. DELIVERSION    EQU    12            ; Current Version of DeliTracker
  54.  
  55. ;---------------------------- Function Offsets ------------------------------
  56.  
  57.  STRUCTURE DeliTrackerPlayer,0
  58.  
  59.     STRUCT    dtp_RTS_code,4            ; RTS for security (private !)
  60.     STRUCT    dtp_ID,8            ; Identifier (private !)
  61.     APTR    dtp_TagArray            ; pointer to TagItem array
  62.     LABEL    dtp_SIZEOF
  63.  
  64. * The TagItem ID's (ti_Tag values) for the player interface follow.
  65.  
  66. DTP_TagBase    EQU    TAG_USER+"DT"
  67.  
  68.     ENUM    DTP_TagBase            ; TagBase
  69.  
  70.     EITEM    DTP_InternalPlayer        ; PRIVATE !!!
  71.     EITEM    DTP_CustomPlayer        ; player is a customplayer
  72.  
  73.     EITEM    DTP_RequestDTVersion        ; minimum DeliTracker version needed
  74.     EITEM    DTP_RequestV37            ; Player needs at least Kick 2.04
  75.  
  76.     EITEM    DTP_PlayerVersion        ; actual player version
  77.     EITEM    DTP_PlayerName            ; name of this player
  78.     EITEM    DTP_Creator            ; misc string
  79.  
  80.     EITEM    DTP_Check1            ; Check Format before loading
  81.     EITEM    DTP_Check2            ; Check Format after file is loaded
  82.     EITEM    DTP_ExtLoad            ; Load additional files
  83.     EITEM    DTP_Interrupt            ; Interrupt routine
  84.     EITEM    DTP_Stop            ; Clear Patterncounter
  85.     EITEM    DTP_Config            ; Config Player
  86.     EITEM    DTP_UserConfig            ; User-Configroutine
  87.     EITEM    DTP_SubSongRange        ; Get min&max subsong number
  88.  
  89.     EITEM    DTP_InitPlayer            ; Initialisize the Player
  90.     EITEM    DTP_EndPlayer            ; Player clean up
  91.     EITEM    DTP_InitSound            ; Soundinitialisation routine
  92.     EITEM    DTP_EndSound            ; End sound
  93.     EITEM    DTP_StartInt            ; Start interrupt
  94.     EITEM    DTP_StopInt            ; Stop interrupt
  95.  
  96.     EITEM    DTP_Volume            ; Set Volume
  97.     EITEM    DTP_Balance            ; Set Balance
  98.     EITEM    DTP_Faster            ; Incease playspeed
  99.     EITEM    DTP_Slower            ; Decrease playspeed
  100.     EITEM    DTP_NextPatt            ; Jump to next pattern
  101.     EITEM    DTP_PrevPatt            ; Jump to previous pattern
  102.     EITEM    DTP_NextSong            ; Play next subsong
  103.     EITEM    DTP_PrevSong            ; Play previous subsong
  104.  
  105. *** end of player interface enumeration ***
  106.  
  107.  
  108. ;--------------------------------- Header -----------------------------------
  109. ;
  110. ; Here is the MACRO for creating the header structure. Use this MACRO !!!
  111. ;
  112.  
  113. PLAYERHEADER    MACRO
  114.     moveq    #-1,d0            ; this should return an error
  115.     rts                ; in case someone tried to run it
  116.     dc.b    'DELIRIUM'        ; identifier
  117.     dc.l    \1            ; ^tagitem array
  118.     ENDM
  119.  
  120.  
  121.     ;------ When a subroutine in the player is called, A5 will contain
  122.     ;------ the pointer to the DeliTrackerGlobals, the only exeption is
  123.     ;------ of course the interrupt routine.
  124.     ;------ The interruptroutine is called every 1/50 sec (via timerint).
  125.  
  126.     ;------ When Check is called, supply d0=0 if the format is ok
  127.     ;------ else d0<>0.
  128.  
  129.     ;------ Check 1 is called before loading the complete file,
  130.     ;------ you can check in the first 1024 Bytes of the file,
  131.     ;------ if the file is smaller than 1kB, the remaining space
  132.     ;------ will contain zero.
  133.  
  134.     ;------ Check 2 is called after the complete file is loaded,
  135.     ;------ you can use dtg_ChkSize to determine the lenght of the file.
  136.     ;------ If you supply this tag the file can be crunched.
  137.  
  138.     ;------ ExtLoad: routine for loading additional files (instruments).
  139.     ;------    If successful, you must return d0=0 else d0<>0. In case of an
  140.     ;------ error DeliTracker frees all memory used for this module.
  141.  
  142.     ;------    InitPlayer: Here you should allocate the audio channels.
  143.     ;------ In case the player supports multi-modules, you must set here
  144.     ;------ dtg_SndNum to the minimal subsong number (not necessary if
  145.     ;------ you have supplied a DTP_SubSongRange routine!).
  146.     ;------ If successful, you must return d0=0 else d0<>0.
  147.  
  148.     ;------    EndPlayer: Here you should free the audio channels.
  149.  
  150.     ;------ InitSound: If you want to use the internal interrupt but don't
  151.     ;------ need the default 50 Hz frequency, you can write another
  152.     ;------ timer value into dtg_Timer.
  153.  
  154.     ;------ Volume usually only copies the values dtg_Volume, dtg_SndLBal
  155.     ;------ and dtg_SndRBal to an internal buffer. The interrupt code has
  156.     ;------ access to this buffer and can set the volume correct.
  157.  
  158.     ;------ Note: the Player can consist of more Hunks. That means you
  159.     ;------ can seperate CHIP DATA form CODE (and you should do this!).
  160.  
  161.  
  162. ;---------------------------- Global Variables ------------------------------
  163.  
  164.  STRUCTURE DeliTrackerGlobals,0
  165.  
  166.     APTR    dtg_ReqBase        ; PRIVATE !!! (this may change in future!)
  167.     APTR    dtg_DOSBase        ; librarybase don't CloseLibrary()
  168.     APTR    dtg_IntuitionBase    ; librarybase "
  169.     APTR    dtg_GfxBase        ; librarybase "
  170.     APTR    dtg_GadToolsBase    : librarybase " (NULL for Kick 1.3 and below)
  171.     APTR    dtg_ReservedLibraryBase    ; reserved for future use
  172.  
  173.     APTR    dtg_DirArrayPtr        ; Ptr to the directory of the current module
  174.     APTR    dtg_FileArrayPtr    ; Ptr to the filename of the current module
  175.     APTR    dtg_PathArrayPtr    ; Ptr to PathArray (e.g used in LoadFile())
  176.  
  177.     APTR    dtg_ChkData        ; pointer to the module to be checked
  178.     ULONG    dtg_ChkSize        ; size of the module
  179.  
  180.     UWORD    dtg_SndNum        ; current sound number
  181.     UWORD    dtg_SndVol        ; volume (ranging from 0 to 64)
  182.     UWORD    dtg_SndLBal        ; left volume (ranging from 0 to 64)
  183.     UWORD    dtg_SndRBal        ; right volume (ranging from 0 to 64)
  184.     UWORD    dtg_LED            ; filter (0 if the LED is off)
  185.     UWORD    dtg_Timer        ; timer-value for the CIA-Timers
  186.  
  187.     FPTR    dtg_GetListData        ;
  188.     FPTR    dtg_LoadFile        ;
  189.     FPTR    dtg_CopyDir        ;
  190.     FPTR    dtg_CopyFile        ;
  191.     FPTR    dtg_CopyString        ;
  192.     FPTR    dtg_AudioAlloc        ;
  193.     FPTR    dtg_AudioFree        ;
  194.     FPTR    dtg_StartInt        ;
  195.     FPTR    dtg_StopInt        ;
  196.     FPTR    dtg_SongEnd        ; save to call from interrupt code!
  197.     FPTR    dtg_CutSuffix        ;
  198.     FPTR    dtg_SetTimer        ; PRIVATE, do not use !!!
  199.     FPTR    dtg_Reserved1        ; do not use !!!
  200.     FPTR    dtg_Reserved2        ; do not use !!!
  201.     FPTR    dtg_Reserved3        ; do not use !!!
  202.  
  203.     ; There is no dtg_SIZEOF cause ...
  204.  
  205.  
  206.     ;------ GetListData(Num:d0): This function returns the memorylocation
  207.     ;------ of a loaded file in a0 and its size in d0. Num starts with 0 
  208.     ;------ (the selected module). Example: GetListData(2) returns the
  209.     ;------ start of the third file loaded (via ExtLoad) in a0 an its size
  210.     ;------ in d0.
  211.  
  212.     ;------ LoadFile(): this function may only be called in the ExtLoad
  213.     ;------ routine. file/pathname must be in dtg_PathArrayPtr then
  214.     ;------ this function will attempt to load the file into CHIPMEM
  215.     ;------ (and DECRUNCH it). If everything went fine, d0 will be zero.
  216.     ;------ If d0 is not zero this indicates an error (e.g. read error,
  217.     ;------ not enough memory, ...).
  218.  
  219.     ;------ CopyDir(): this function copies the pathname at the end
  220.     ;------ of the string in dtg_PathArrayPtr(a5).
  221.  
  222.     ;------ CopyFile(): this function copies the filename at the end
  223.     ;------ of the string in dtg_PathArrayPtr(a5).
  224.  
  225.     ;------ CopyString(Ptr:a0): this function copies the string in a0
  226.     ;------ at the end of the string in dtg_PathArrayPtr(a5).
  227.  
  228.     ;------ AudioAlloc(): this function allocates the audiochannels.
  229.     ;------ If d0=0 all is ok, d0<>0 indicates an error.
  230.  
  231.     ;------ AudioFree(): this function frees the audiochannels allocated
  232.     ;------ with AudioAlloc().
  233.  
  234.     ;------ StartInt(): this function starts the timer-interrupt.
  235.  
  236.     ;------ StopInt(): this function stops the timer-interrupt started
  237.     ;------ with StartInt().
  238.  
  239.     ;------ SongEnd(): signal the songend to DeliTracker
  240.     ;------    This call is guaranteed to preserve all registers.
  241.  
  242.  
  243.     ENDC    ; DELITRACKER_PLAYER_I
  244.  
  245.  
  246.